package com.soft.mainsite.module.web.cms.service;

import com.github.pagehelper.PageInfo;
import com.soft.mainsite.common.base.BaseService;
import com.soft.mainsite.module.web.cms.vo.TCmsContentVo;
import com.soft.mainsite.mybatis.model.TCmsContent;
import com.soft.mainsite.mybatis.model.TCmsModelFiled;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * Description:内容
 *
 * @author Jin
 * @create 2017-04-18
 **/
public interface ContentService extends BaseService<TCmsContent, Long> {

    /**
     * 分页查询
     *
     * @param pageNumber
     * @param pageSize
     * @param pojo
     * @return
     */
    PageInfo<TCmsContent> page(Integer pageNumber, Integer pageSize, TCmsContentVo pojo);

    /**
     * 内容分页
     *
     * @param pageNumber
     * @param pageSize
     * @param pojo
     * @return
     */
    PageInfo<TCmsContent> pageContent(Integer pageNumber, Integer pageSize, TCmsContentVo pojo);

    /**
     * 根据内容id和表名查询内容
     *
     * @param contentId
     * @param tableName
     * @return
     */
    Map findContentByContentIdAndTableName(Long contentId, String tableName);

    /**
     * 回收站
     *
     * @param ids
     * @return
     */
    String recovery(Long[] ids);

    /**
     * 保存
     *
     * @param content
     * @param tableName
     * @param formParam
     * @param tag
     * @return
     * @throws SQLException
     */
    String save(TCmsContent content, String tableName, Map<String, Object> formParam, String[] tag) throws SQLException;

    /**
     * 更新
     *
     * @param content
     * @param tableName
     * @param cmsModelFileds
     * @param formParam
     * @param tag
     * @return
     * @throws SQLException
     */
    String update(TCmsContent content, String tableName, List<TCmsModelFiled> cmsModelFileds, Map<String, Object> formParam, String[] tag) throws SQLException;

    /**
     * 根据站点id和栏目id查询内容列表
     *
     * @param siteId
     * @param siteType
     * @param categoryId
     * @param orderBy
     * @param pageNumber
     * @param pageSize
     * @param hasChild
     * @param isHot
     * @param isPic
     * @param isRecommend
     * @param whereParam
     * @param valueParam
     * @param sortNum 排序字段
     * @return
     */
    PageInfo<Map> findContentListBySiteIdAndCategoryId(Integer siteId,
                                                       String siteType,
                                                       Long categoryId,
                                                       Integer orderBy,
                                                       Integer pageNumber,
                                                       Integer pageSize,
                                                       Integer hasChild,
                                                       Integer isHot,
                                                       Integer isPic,
                                                       Integer isRecommend,
                                                       String whereParam,
                                                       String valueParam,
                                                       Integer sortNum);

    /**
     * 根据站点和栏目查询推荐
     *
     * @param siteId
     * @param categoryId
     * @param topicId
     * @param orderBy
     * @param pageSize
     * @param siteType
     * @param isRecommend
     * @return
     */
    PageInfo<Map> findHomeContentList(Integer siteId,
                                      Long categoryId,
                                      Integer topicId,
                                      Integer orderBy,
                                      Integer pageSize,
                                      String siteType,
                                      Integer isRecommend);

    /**
     * 根据站点id和栏目id查询专题内容
     *
     * @param siteId
     * @param categoryIds
     * @param orderBy
     * @param size
     * @param isHot
     * @param isPic
     * @param isRecommend
     * @return
     */
    PageInfo<Map> findTopicContentListBySiteIdAndCategoryIds(Integer siteId,
                                                             Long[] categoryIds,
                                                             Integer orderBy,
                                                             Integer size,
                                                             Integer isHot,
                                                             Integer isPic,
                                                             Integer isRecommend);

    /**
     * 根据站点id和栏目id查询专题和模型列表
     *
     * @param siteId
     * @param categoryIds
     * @param orderBy
     * @param size
     * @param isHot
     * @param isPic
     * @param isRecommend
     * @return
     */
    PageInfo<Map> findTopicAndModelContentListBySiteIdAndCategoryIds(Integer siteId,
                                                                     Long[] categoryIds,
                                                                     Integer orderBy,
                                                                     Integer size,
                                                                     Integer isHot,
                                                                     Integer isPic,
                                                                     Integer isRecommend);


    /**
     * 分页
     *
     * @param pageNumber
     * @param siteId
     * @param categoryId
     * @return
     */
    PageInfo<Map> page(Integer pageNumber, Integer siteId, Long categoryId);

    /**
     * 根据模型字段值查询内容列表
     *
     * @param pageNumber
     * @param categoryId
     * @param tableName
     * @param param
     * @return
     */
    PageInfo<TCmsContent> findContentListByModelFiledValue(int pageNumber, Long categoryId, String tableName, Map<String, Object> param);

    /**
     * 更新
     *
     * @param contentId
     */
    void viewUpdate(Long contentId);

    /**
     * 查询所有月份
     *
     * @return
     */
    String findAllMonthCount();

    /**
     * 查询所有记录
     *
     * @return
     */
    Integer allCount();

    /**
     * 根据栏目id查询
     *
     * @param categoryId
     * @return
     */
    List<TCmsContent> findByCategoryId(Long categoryId);

    /**
     * 根据站点id和栏目id查询
     *
     * @param siteId
     * @param categoryId
     * @return
     */
    List<TCmsContent> findBySiteIdAndCategoryId(Integer siteId, Long categoryId);

    /**
     * 通过contentId和查询数据
     *
     * @param contentId
     * @return
     */
    Map findByContentId(Long contentId);

    /**
     * 通过模型id和站点类型查询内容列表
     *
     * @param modelId
     * @param siteType
     * @return
     */
    List<Map> findByModelIdAndSiteType(Long modelId, String siteType);

    /**
     * 通过模型id和内容id查询内容列表
     *
     * @param modelId
     * @param contentIds
     * @return
     */
    List<Map> findByModelIdAndContentIds(Long modelId, String[] contentIds);

    /**
     * 更新内容发布状态
     *
     * @param contentId
     * @param status
     * @return
     */
    Integer updateStateByContentId(Long contentId, Long status);

    /**
     * 修改发布状态
     *
     * @param ids
     * @return java.lang.String
     * @author 胡佳明
     * @date 2019/4/22 16:29
     */
    Integer updateAudit(Long[] ids);

    /**
     * 审核不通过
     *
     * @param ids
     * @return java.lang.String
     * @author 胡佳明
     * @date 2019/4/22 16:29
     */
    Integer auditFail(Long[] ids);

    /**
     * 删除内容（物理删除）
     *
     * @param ids
     * @return
     */
    String deleteContent(Long[] ids);
}
